package com.jf.identity.dao.visexamid;

import com.jf.identity.entity.ExamBaseParam;
import com.jf.identity.entity.ExamineeRelInfo;
import com.jf.identity.entity.VerifyInfo;
import com.jf.identity.entity.VerifyTrace;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author Administrator
 */
@Repository
public interface ExamineeDao {
    /**
     * 获取考生编排信息
     *
     * @param examBaseParam 考试信息
     *                      "OrgCode": "机构代码",
     *                      "ExamPlan": "考试计划编号",
     *                      "ExamSession": "考试场次序号"
     * @return 考生编排信息
     */
    ExamineeRelInfo getExamineeRelInfo(ExamBaseParam examBaseParam);

    /**
     * 提交考生验证信息
     *
     * @param verifyInfos 考生验证信息 list
     *                    "uid":"PK"
     *                    "SFZJH": "(必需)身份证件号",
     *                    "KSH": "(必需)考试号/考号",
     *                    "YZSJ": "(必需)验证时间 yyyy-MM-dd HH:mm:ss",
     *                    "YZFSDM": "(必需)验证方式码:1刷身份证；2指纹；3ID号验证；4人脸比对；5拍照；6人工审核",
     *                    "YZJG": "(必需)验证结果 1:通过  0：存疑  -1：不通过",
     *                    "YZSB": "验证设备编号"
     *                    "examBaseParam":"考试基本信息"
     *                    "orgCode": "机构代码",
     *                    "examId": "考试计划编号",
     *                    "examSessionNum": "考试场次编号",
     * @return 成功条数
     */
    int insertExamineeVerifyInfo(List<VerifyInfo> verifyInfos);

    /**
     * 提交考生验证轨迹
     *
     * @param verifyTraces 验证轨迹信息
     *                     "uid":"PK"
     *                     "SFZJH": "(必需)身份证件号",
     *                     "KSH": "(必需)考试号/考号",
     *                     "YZSJ": "(必需)验证时间 yyyy-MM-dd HH:mm:ss",
     *                     "YZX": "验证项，验证轨迹类型:1刷身份证；2指纹；3ID号验证；4人脸比对；5拍照；6人工审核",
     *                     "YZXJG": "验证项结果, 1:通过  0：存疑  -1：不通过"
     *                     "YZSB": "验证设备编号"
     *                     "examBaseParam":"考试基本信息"
     *                     "orgCode": "机构代码",
     *                     "examId": "考试计划编号",
     *                     "examSessionNum": "考试场次编号",
     * @return 成功条数
     */
    int insertExamineeVerifyTrace(List<VerifyTrace> verifyTraces);

    /**
     * 更新 v_examinee_final_vodinfo_1.ksrc_status ksrc_status_time sfyz_qk sfyz_qk_time 字段
     *
     * @param verifyInfo "KSH": "(必需)考试号/考号",
     *                   "YZJG": "(必需)验证结果 1:通过  0：存疑  -1：不通过"
     *                   "examBaseParam":"考试基本信息"
     *                   "orgCode": "机构代码",
     *                   "examId": "考试计划编号",
     *                   "examSessionNum": "考试场次编号",
     * @return 成功条数
     */
    int updateFinalVodInfo(@Param("verifyInfo") VerifyInfo verifyInfo);

    /**
     * 更新 v_examinee_final_vodinfo_1.ksrc_status ksrc_status_time sfyz_qk sfyz_qk_time 字段
     *
     * @param verifyInfos "uid":"{考试计划编号}_{准考证号}_{场次}"
     *                    "KSH": "(必需)考试号/考号",
     *                    "YZJG": "(必需)验证结果 1:通过  0：存疑  -1：不通过"
     *                    "examBaseParam":"考试基本信息"
     *                    "examSessionNum": "考试场次编号",
     * @return 成功条数
     */
    int updateFinalVodInfos(@Param("verifyInfos") List<VerifyInfo> verifyInfos,
                            @Param("examBaseParam") ExamBaseParam examBaseParam);

    /**
     * 查询 已验证人数
     *
     * @param examBaseParam "orgCode": "机构代码",
     *                      "examId": "考试计划编号",
     *                      "examSessionNum": "考试场次编号",
     * @return 已验证人数
     */
    int getVerifyInfoCount(ExamBaseParam examBaseParam);

    /**
     * 查询 验证轨迹信息
     *
     * @param examBaseParam "orgCode": "机构代码",
     *                      "examId": "考试计划编号",
     *                      "examSessionNum": "考试场次编号",
     * @return 验证轨迹信息
     */
    List<VerifyTrace> getVerifyTraces(ExamBaseParam examBaseParam);
}
